"""
1、编写demo研究django如何实现页面渲染
2、定义函数，实现首页静态化
"""

from django.template import loader
from django.conf import settings
import os

from .models import ContentCategory,Content
from .utils import get_categories

# TODO：使用django实现页面渲染
class static_demo():
    # 1、获取动态参数
    # 注意：在django中模版参数类型，支持python基础类型，还支持django模型类对象
    data = {
        'name': 'weiwei',
        'age': 18
    }
    # 2、获取html模版对象
    template = loader.get_template('demo.html')
    # 3、找模版对象的方法，实现页面渲染(把动态数据填充html模版中)
    # render方法，功能是渲染页面数据，参数context是动态模版参数，返回值是完整的html页面数据(字符)
    content = template.render(context=data)
    # 4、把完整的html页面数据保存成静态文件
    with open('1.html', 'w') as f:
        f.write(content)

# TODO: 首页(index.html)静态化
def generate_static_index_html():

    # categories动态模版参数，用于构造首页中的三级导航信息
    categories = get_categories()

    # contents动态模版参数，用于构造首页中的广告数据
    contents = {}
    # 结构：
    # contents = {
    #     分类对象的.key属性作为键 ：该分类下面的广告对象查询集
    # }
    cats = ContentCategory.objects.all()
    for cat in cats:
        # cat是每一个ContentCategory对象，代表页面的某一个广告位置
        contents[cat.key] = cat.content_set.filter(status=True) # 只渲染上架的广告

    # 1、构建模版参数
    context = {
        'categories': categories,
        'contents': contents
    }

    # 2、获取模版对象
    template = loader.get_template('index.html')

    # 3、渲染页面数据
    content = template.render(context)

    # 4、保存完整的静态文件index.html
    # settings.BASE_DIR --> /Users/weiwei/Desktop/meiduo_mall_sz43/meiduo_mall/meiduo_mall
    # os.path.dirname(settings.BASE_DIR) --> /Users/weiwei/Desktop/meiduo_mall_sz43/meiduo_mall/
    # os.path.dirname(os.path.dirname(settings.BASE_DIR)) --> /Users/weiwei/Desktop/meiduo_mall_sz43/

    # /Users/weiwei/Desktop/meiduo_mall_sz43/front_end_pc/index.html
    file_path = os.path.join(
        os.path.dirname(os.path.dirname(settings.BASE_DIR)),
        'front_end_pc/index.html'
    )

    with open(file_path, 'w') as f:
        f.write(content)


